package Test;

import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;

import junit.framework.TestCase;


import Presentacion.VentanaCliente;
import Presentacion.VentanaLogin;

public class test extends TestCase{
	VentanaLogin vLogin;
	public void testLoginC() {		
		vLogin=iniciarSesion();
		assertTrue(vLogin.cliente.isVisible());			
	}
	
	public void testAnadirProductosC() throws Exception{	
		setUp();
		testLoginC();
		double costoActual;
		double costoNuevo;
		double costoCorrecto;
		double resto;
		if(vLogin.cliente.lblprecioTotal.getText().isEmpty()){
			costoActual=0;
		}else{
			costoActual=Double.parseDouble(vLogin.cliente.lblprecioTotal.getText().replace(',', '.'));
		}
		
		vLogin.cliente.cBCantidad.setSelectedItem("2");
		vLogin.cliente.tableProductosP.changeSelection(0, 1, false, false);		
		vLogin.cliente.btnAnadir.doClick();	
		costoNuevo=Double.parseDouble(vLogin.cliente.lblprecioTotal.getText().replace(',', '.'));
		costoCorrecto=costoActual+Double.parseDouble(vLogin.cliente.tableProductosP.getModel().getValueAt(vLogin.cliente.tableProductosP.getSelectedRow(), 2).toString())*2;			
		assertTrue(costoNuevo==costoCorrecto);
	}
	public void testEliminarProductosC() throws Exception{
		double costoActual;
		double costoNuevo;
		double costoCorrecto;
		double resto;
		
		vLogin.cliente.cBCantidad.setSelectedItem("4");
		vLogin.cliente.tableProductosP.changeSelection(1, 1, false, false);		
		vLogin.cliente.btnAnadir.doClick();	
		vLogin.cliente.cBCantidad.setSelectedItem("1");
		vLogin.cliente.tablePE.changeSelection(0, 1, false, false);
		if(vLogin.cliente.lblprecioTotal.getText().isEmpty()){
			costoActual=0;
		}else{
			costoActual=Double.parseDouble(vLogin.cliente.lblprecioTotal.getText().replace(',', '.'));
		}
		costoCorrecto=costoActual-Double.parseDouble(vLogin.cliente.tablePE.getModel().getValueAt(vLogin.cliente.tablePE.getSelectedRow(), 1).toString())*1;
		vLogin.cliente.btnEliminar.doClick();			
		costoNuevo=Double.parseDouble(vLogin.cliente.lblprecioTotal.getText().replace(',', '.'));			
		assertTrue(costoNuevo==costoCorrecto);		
	}
	public void testEstablecerPedidoC() throws Exception{
		testAnadirProductosC();
		vLogin.cliente.txtPeriodicidad.setText("5");
		vLogin.cliente.comboBoxFormaPago.setSelectedItem("Pay Pal");
		vLogin.cliente.txtCantidadMin.setText("2");
		vLogin.cliente.btnEstablecerPedido.doClick();		
		assertTrue(equalsTablas(vLogin.cliente.tablePE, vLogin.cliente.tableProductos));
		
	}
	public void testActulizarExistenciasC() throws Exception{
		vLogin.cliente.txtPeriodicidad.setText("5");
		vLogin.cliente.comboBoxFormaPago.setSelectedItem("Pay Pal");
		vLogin.cliente.txtCantidadMin.setText("2");
		vLogin.cliente.btnEstablecerPedido.doClick();
		
		vLogin.cliente.tableProductos.changeSelection(0, 2, false, false);//Ponemos chanceSelection porque al ejecutar btnAnadirP se tiene que tener seleccionado un elemento de la tabla, que va a ser el que se encuentra en la fila 0.	
		String exis1=(String)vLogin.cliente.tableProductos.getModel().getValueAt(vLogin.cliente.tableProductos.getSelectedRow(), 2);
		String aux="5";		
		vLogin.cliente.txtE.setText(aux);
		vLogin.cliente.btnAnadirP.doClick();		
		String exis2=String.valueOf(vLogin.cliente.tableProductos.getValueAt(0, 2));//Aqui se pone 0 porque es el producto al que hemos modificado la cantidad y no seguimos utilizando getSelectedRow() porque al dar al botón la selección se quita.
		assertTrue((Integer.parseInt(exis1)+Integer.valueOf(aux))==Integer.valueOf(exis2));
		
	}
	
	public void testEliminarExistenciasC() throws Exception{
		vLogin.cliente.tableProductos.changeSelection(0, 2, false, false);//Ponemos chanceSelection porque al ejecutar btnLector se tiene que tener seleccionado un elemento de la tabla, que va a ser el que se encuentra en la fila 0.	
		String exis1=(String)vLogin.cliente.tableProductos.getModel().getValueAt(vLogin.cliente.tableProductos.getSelectedRow(), 2);
		String aux="1";		
		vLogin.cliente.txtE.setText(aux);
		vLogin.cliente.btnLector.doClick();		
		String exis2=String.valueOf(vLogin.cliente.tableProductos.getValueAt(0, 2));//Aqui se pone 0 porque es el producto al que hemos modificado la cantidad y no seguimos utilizando getSelectedRow() porque al dar al botón la selección se quita.
		assertTrue((Integer.parseInt(exis1)-Integer.valueOf(aux))==Integer.valueOf(exis2));
		
	}
	public void testCerrarSesionC() throws Exception{
		vLogin.cliente.btnCerrarSesion.doClick();
		assertTrue(vLogin.window.frmLogin.isVisible());
		
	}
	protected void setUp(){
		/*DefaultTableModel modelo = (DefaultTableModel) vLogin.cliente.tablePE.getModel();
        while(modelo.getRowCount()>0)modelo.removeRow(0);
 
        TableColumnModel modCol = vLogin.cliente.tablePE.getColumnModel();
        while(modCol.getColumnCount()>0)modCol.removeColumn(modCol.getColumn(0));*/
        vLogin.cliente.btnAnadir.setEnabled(true);
        vLogin.cliente.btnEliminar.setEnabled(true);
        vLogin.cliente.cBCantidad.setEnabled(true);
        vLogin.cliente.btnEstablecerPedido.setEnabled(true);
        vLogin.cliente.txtPeriodicidad.setEnabled(true);
        vLogin.cliente.txtCantidadMin.setEnabled(true);
        vLogin.cliente.comboBoxFormaPago.setEnabled(true);
	}

	/*public boolean comprobar(VentanaLogin vLogin){
		boolean ok=true;
		for(int i=0;i< vLogin.cliente.tablePE.getModel().getRowCount();i++){
			if(!vLogin.cliente.tablePE.getModel().getValueAt(i, 0).equals(vLogin.cliente.tableProductos.getModel().getValueAt(i, 0))){
				ok=false;
			}
		}
		return ok;
	}*/
	
	public VentanaLogin iniciarSesion(){
		VentanaLogin vLogin=new VentanaLogin();		
		vLogin.txtUsuario.setText("111111");
		vLogin.txtContrasena.setText("12345");		
		vLogin.btnAceptar.doClick();
		return vLogin;
	}
	public boolean equalsTablas(JTable tableInicial, JTable tableFinal){
		boolean encontrado=true;
		for(int i=0; i<tableInicial.getRowCount() && encontrado; i++){
			encontrado=false;
			for(int j=0; j<tableFinal.getRowCount(); j++){
				if(tableInicial.getModel().getValueAt(i, 0).equals(tableInicial.getModel().getValueAt(j, 0))) encontrado=true;
			}
			
		}
		return encontrado;
	}
	

}
